package de.fau.cs.mad.fly.res; import com.badlogic.gdx.assets.AssetDescriptor; import com.badlogic.gdx.assets.AssetLoaderParameters; import com.badlogic.gdx.assets.AssetManager; import com.badlogic.gdx.assets.loaders.AsynchronousAssetLoader; import com.badlogic.gdx.assets.loaders.FileHandleResolver; import com.badlogic.gdx.assets.loaders.resolvers.InternalFileHandleResolver; import com.badlogic.gdx.files.FileHandle; import com.badlogic.gdx.graphics.Texture.TextureFilter; import com.badlogic.gdx.graphics.g3d.Model; import com.badlogic.gdx.graphics.g3d.loader.ObjLoader.ObjLoaderParameters; import com.badlogic.gdx.utils.Array; import de.fau.cs.mad.fly.game.GameModel; /** * Created by danyel on 12/06/14. */ public class GameModelLoader extends AsynchronousAssetLoader<GameModel, GameModelLoader.GameModelParameters> { public GameModelLoader(FileHandleResolver resolver) { super(resolver); } public GameModelLoader() { this(new InternalFileHandleResolver()); } private GameModel object; private boolean hitboxExists = true; private String hitboxName; private void getHitbox(String fileName) { if (hitboxName == null && hitboxExists) { hitboxName = fileName.replace(".g3db", ".hitbox.g3db"); hitboxExists = resolve(hitboxName).exists(); } } @Override public void loadAsync(AssetManager manager, String fileName, FileHandle file, GameModelParameters parameter) { fileName += ".g3db"; object = null; getHitbox(fileName); Model display = manager.get(fileName, Model.class); if (hitboxExists) { object = new GameModel(display, manager.get(hitboxName, Model.class)); } else { object = new GameModel(display, display); } } @Override public GameModel loadSync(AssetManager manager, String fileName, FileHandle file, GameModelParameters parameter) { GameModel g = object; object = null; hitboxExists = true; hitboxName = null; return g; } @Override public Array<AssetDescriptor> getDependencies(String fileName, FileHandle file, GameModelParameters parameter) { fileName += ".g3db"; getHitbox(fileName); Array<AssetDescriptor> arr = new Array<AssetDescriptor>(); // ObjLoaderParameters modelParameters = new ObjLoaderParameters(); // TODO: bad workaround for the spacesphere // if (!fileName.equals("spacesphere.obj")) { // modelParameters.textureParameter.genMipMaps = true; // // TODO: check if the mag and min filter parameter are correct. // modelParameters.textureParameter.magFilter = TextureFilter.MipMap; // modelParameters.textureParameter.minFilter = TextureFilter.Nearest; // } arr.add(new AssetDescriptor<Model>(fileName, Model.class)); if (hitboxExists) arr.add(new AssetDescriptor<Model>(hitboxName, Model.class)); return arr; } static public class GameModelParameters extends AssetLoaderParameters<GameModel> { } }